/*
 * ManipulacionDatos.java
 *
 * Created on 5 de julio de 2005, 09:23 PM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */
package ig.formato.basic;

import ig.basic.util.IMetodosPantallas;
import ig.formato.dto.basic.DTO;
import ig.formato.gui.app.DConfirmacion;
import ig.formato.gui.run.PrincipalIGFormato;
import ig.formato.util.CodigoBotones;
import ig.formato.util.EstadoRegistroBasico;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JInternalFrame;
import javax.swing.JMenuBar;
import javax.swing.AbstractButton;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Container;
//lang
import java.awt.Frame;
import java.io.IOException;
import java.lang.reflect.*;
import java.util.Map;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
 *
 * @author Propietario
 */
import javax.swing.JViewport;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;

public class ManipulacionDatos extends JInternalFrame {

    public Map<String, Object> parametros = new java.util.HashMap<String, Object>();
    /**
     * <p>Barra de herramientas con un grupo de botones comunes a todos las ventanas
     * que manipulan datos</p>
     *
     */
    private BarraEstandar barra;
    /**
     * <p>Menu con un grupo de items comunes a todos las ventanas
     * que manipulan datos</p>
     *
     */
    private MenuEstandar menu;
    /**
     * <p>Represents ...</p>
     *
     */
    //private Modelo modelo;
    private boolean confimacioSalir = false;
    private Container c;
    private Object panelMetodosPantalla;

    /**
     * <p>Crea una internal frame con la barra de tareas y la barra de menu estandar</p>
     *
     */
    public ManipulacionDatos() {
        this(true, true);
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {

            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }

            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
            }

            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosing(evt);
            }

            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }

            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }

            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }

            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
        });
    }
    private String mensaje = null;

    public void setConfimacioSalir(boolean confimacioSalir, String mensaje) {
        this.confimacioSalir = confimacioSalir;
        this.mensaje = mensaje;
    }

    public void formInternalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
        try {
            ((IMetodosPantallas) panelMetodosPantalla).salir();
        } catch (ig.formato.util.IGFormatoException ex) {
            //this.dispose();
        }
    }

    /**
     * <p>Does ...</p>
     *
     *
     * @param tieneBarra
     * @param tieneMenu
     */
    public ManipulacionDatos(boolean tieneBarra, boolean tieneMenu) {
        super("", true, false, true, true);
        c = getContentPane();
        c.setLayout(new BorderLayout());

        JMenuBar menuBar = new JMenuBar(); //Menu bar para esta ventana
        barra = new BarraEstandar(); //barra de herramientas
        menu = new MenuEstandar("Menu"); //Menu
        iniciarComponentes(); //inicializar Componentes
        if (tieneMenu) {
            menuBar.add(menu); //Adicionar menu a la barra
            setJMenuBar(menuBar); //Adicionar barra a la ventana
        }
        if (tieneBarra) {
            c.add(barra, BorderLayout.NORTH);
        }
        setEstado(CodigoBotones.grupoEntrada);
        c.setVisible(true);
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * guardar o en el boton guardar. lo primero que  hace es invocar
     * al metodo guardar quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al metodo guardar del Modelo y si todo va bien
     * invoca despues al metodo setEstado pasando como parametro el valor de
     * com.ig.comunes.constantes.CodigoBotones.grupoGuardarPresionado, despues de esto,
     * inhabilita todos los controles visibles en la ventana</p>
     *
     *
     * @param e 
     */
    public void guardarActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        //llamar al metodo de la clase que sobreescriba herede de esta.
        try {
            estado = Integer.valueOf(getEstado());
            ((IMetodosPantallas) panelMetodosPantalla).validar();
            boolean b = ((IMetodosPantallas) panelMetodosPantalla).getModelo().isClonar();
            if (b || JOptionPane.showConfirmDialog(this, " Desea guardar los cambios ?", "Mensaje de confirmaci\363n", 2) == 0) {
                ((IMetodosPantallas) panelMetodosPantalla).guardar();
                habilitaControles(false);
                setEstado(238);
                JOptionPane.showMessageDialog( this, "Los datos han sido almacenados");
            }
        } catch (ig.formato.util.IGFormatoException nce) {
            setEstado(estado);
            showMensaje(nce);
        } catch (Exception ex) {
            setEstado(estado);
            showMensaje(ex);
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * buscar o en el boton buscar. lo primero que  hace es invocar
     * al metodo buscar quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al metodo buscar del Modelo y si todo va bien
     * invoca despues al metodo setEstado pasando como parametro el valor de
     * com.ig.comunes.constantes.CodigoBotones.grupoBuscarPresionado, despues de esto,
     * inhabilita todos los controles visibles en la ventana</p>
     *
     *
     * @param e
     */
    public void buscarActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            ((IMetodosPantallas) panelMetodosPantalla).buscar();
            setEstado(CodigoBotones.grupoBuscarPresionado);
            habilitaControles(false);
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            showMensaje(ex);
        } catch (ig.formato.util.NinguDatoSeleccionadoException ex) {
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * modificar o en el boton modificar. lo primero que  hace es invocar
     * al metodo modificar quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al metodo modificar del Modelo y si todo va bien
     * invoca despues al metodo setEstado pasando como parametro el valor de
     * com.ig.comunes.constantes.CodigoBotones.grupoModificarPresionado, despues de esto,
     * inhabilita todos los controles visibles en la ventana</p>
     *
     *
     * @param e
     */
    public void modificarActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            ((IMetodosPantallas) panelMetodosPantalla).modificar();
            setEstado(CodigoBotones.grupoModificarPresionado);
            habilitaControles(true);
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            //throw ex;
            showMensaje(ex);
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * nuevp o en el boton nuevo. lo primero que  hace es invocar
     * al metodo nuevo quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al metodo nuevo del Modelo y si todo va bien
     * invoca despues al metodo setEstado pasando como parametro el valor de
     * com.ig.comunes.constantes.CodigoBotones.grupoNuevoPresionado, despues de esto,
     * inhabilita todos los controles visibles en la ventana</p>
     *
     *
     * @param e
     */
    public void nuevoActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            limpiar = true;
            ((IMetodosPantallas) panelMetodosPantalla).nuevo();
            setEstado(CodigoBotones.grupoNuevoPresionado);
            habilitaControles(true);
            limpiaControles(c);
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            //throw ex;
            showMensaje(ex);
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * eliminar o en el boton eliminar. lo primero que  hace es invocar
     * al metodo eliminar quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al metodo eliminar del Modelo y si todo va bien
     * invoca despues al metodo setEstado pasando como parametro el valor de
     * com.ig.comunes.constantes.CodigoBotones.grupoEliminarPresionado, despues de esto,
     * inhabilita todos los controles visibles en la ventana</p>
     *
     *
     * @param e
     */
    public void eliminarActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            if (JOptionPane.showConfirmDialog(this, "Desea eliminar el objeto actual?", "Mensaje de confirmaci\u00F3n", JOptionPane.OK_CANCEL_OPTION) == 0) {
                limpiar = true;
                ((IMetodosPantallas) panelMetodosPantalla).eliminar();
                setEstado(CodigoBotones.grupoEntrada);
                limpiaControles(c);
                habilitaControles(false);
            }
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            //throw ex;
            showMensaje(ex);
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el menu
     * salir o en el boton salir. lo primero que  hace es invocar
     * al metodo salir quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al m???todo salir del Modelo y si todo va bien
     * cierra y deshecha esta ventana</p>
     *
     *
     * @param e
     */
    public void salirActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            ((IMetodosPantallas) panelMetodosPantalla).salir();
            setEstado(CodigoBotones.grupoEntrada);
            limpiaControles();
            try {
                setClosed(true);
            } catch (PropertyVetoException ex) {
                ex.printStackTrace();
            }
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            ex.printStackTrace();
            showMensaje(ex);
        }
    }

    /**
     * <p>Recibe el evento que se dispara cuando el usuario hace click en el men???
     * imprimir o en el bot???n imprimir. lo primero que  hace es invocar
     * al m???todo imprimir quien es el que realmente tiene definido lo que se debe
     * realizar, luego invoca al m???todo imprimir del Modelo</p>
     *
     *
     * @param e
     */
    public void imprimirActionPerformed(java.awt.event.ActionEvent e) throws ig.formato.util.IGFormatoException {
        estado = getEstado();
        try {
            ((IMetodosPantallas) panelMetodosPantalla).imprimir();
            this.parametros.put("ID", ((DTO) (((IMetodosPantallas) panelMetodosPantalla).getModelo()).getTO()).getId());
            Connection con = (((IMetodosPantallas) panelMetodosPantalla).getModelo()).getConectionMaster();
            String nombre = (String) this.parametros.get("JASPER");
            if (nombre == null) {
                nombre = ((IMetodosPantallas) panelMetodosPantalla).getClass().getName();
            }

            JasperViewer viewer = new JasperViewer(JasperFillManager.fillReport(this.getReporte(nombre), parametros, con));
            javax.swing.JInternalFrame iFrame = new javax.swing.JInternalFrame("Jasper Vierwer", true, true, true, true);
            iFrame.setSize(700, 600);
            iFrame.setVisible(true);
            iFrame.add(viewer.getContentPane());
            ((PrincipalIGFormato) ((IMetodosPantallas) panelMetodosPantalla).getFrame()).addComponente(iFrame);

        } catch (Exception ex) {
            setEstado(estado);
            showMensaje(ex);
        }
    }

    private JasperReport getReporte(String reporte) throws IOException, JRException, Exception {
        return (JasperReport) net.sf.jasperreports.engine.util.JRLoader.loadObject(getClass().getResourceAsStream("/ig/reportes/" + reporte.trim() + ".jasper"));
    }

    /*
     *
     *
     */
    public void cancelarActionPerformed(ActionEvent e) throws ig.formato.util.IGFormatoException {
        try {
            if (getEstado() != CodigoBotones.grupoModificarPresionado || getEstado() == CodigoBotones.grupoNuevoPresionado) {
                ((IMetodosPantallas) panelMetodosPantalla).limpiar();
            }
            //setEstado(CodigoBotones.grupoEntrada);
            ((IMetodosPantallas) panelMetodosPantalla).cancelar();
            habilitaControles(false);
//            this.limpiar=true;
            if (getEstado() != CodigoBotones.grupoModificarPresionado || getEstado() == CodigoBotones.grupoNuevoPresionado) {
                limpiaControles();
                setEstado(CodigoBotones.grupoEntrada);
            } else {
                setEstado(getEstadoAnterior());
            }
            estado = getEstado();
        } catch (ig.formato.util.IGFormatoException ex) {
            setEstado(estado);
            //throw ex;
            showMensaje(ex);
        }
    }
    Integer estado = null;

    public Integer getEstadoAnterior() {
        return estado;
    }

    /**
     * <p>Asigna el estado que debe tener la barra y el men???, esto es
     * los botones que deben aparecer habilitados
     * </p>
     *
     *
     * @param _estado
     */
    public void setEstado(int _estado) {
        barra.setEstado(_estado);
        menu.setEstado(_estado);
    }

    /**
     * <p>Recupera el estado actual de la barra de herramientas y de menu</p>
     *
     *
     * @return
     */
    public int getEstado() {
        return barra.getEstado();
    }

    /**
     * <p>Determina que items y que botones deberan poderse ver en la barra de menu y
     * en la de tareas, respectivamente</p>
     *
     *
     * @param _visibles
     */
    public void setVisibles(int _visibles) {
        barra.setVisible(_visibles);
        menu.setVisible(_visibles);
    }

    /**
     * <p>devuelve los botones y los items que son visibles actualmente</p>
     *
     *
     * @param _visibles
     */
    public void getVisibles(int _visibles) {
    }

    /**
     * <p>Barra de herramientas con un grupo de botones comunes a todos las ventanas
     * que manipulan datos</p>
     *
     *
     * @return
     */
    public BarraEstandar getBarra() {
        return barra;
    }

    /**
     * <p>Barra de herramientas con un grupo de botones comunes a todos las ventanas
     * que manipulan datos</p>
     *
     *
     * @param _barra
     */
    public void setBarra(BarraEstandar _barra) {
        barra = _barra;
    }

    public Component[] getControles() {
        return getControles(getContentPane());
    }

    public Component[] getControles(Container c) {
        if (c == null) {
            return getContentPane().getComponents();
        } else {
            return c.getComponents();
        }
    }

    /**
     * <p>Recorre los controles incluidos en la ventana inhabilitando aquellos
     * que se encuentren habilitados</p>
     *
     */
    public void habilitaControles(boolean valor) {
        habilitaControles(getControles(), valor);
    }

    public void habilitaControles(Component[] cs, boolean valor) {
        for (int i = 0; i < cs.length; i++) {
            Component _c = cs[i];
            if (_c.getName() != null) {
                if (_c.getName().equals("NO_ALL") || _c.getName().equals("NO_ENABLED")) {
                    okLimpiar = false;
                } else {
                    okLimpiar = true;
                }
            } else {
                okLimpiar = true;
            }
            if (okLimpiar) {
                okLimpiar = false;
                if (_c instanceof JFormattedTextField) {
                    ((JFormattedTextField) _c).setEnabled(valor);
                }
                if (_c instanceof JTextArea) {
                    ((JTextArea) _c).setEnabled(valor);
                }
                if (_c instanceof javax.swing.JRadioButton) {
                    ((javax.swing.JRadioButton) _c).setEnabled(valor);
                } else if (_c instanceof JTextField) {
                    ((JTextField) _c).setEnabled(valor);
                } else if (_c instanceof javax.swing.JTabbedPane) {
                    habilitaControles(getControles((javax.swing.JTabbedPane) _c), valor);
                } else if (_c instanceof javax.swing.JSplitPane) {
                    habilitaControles(getControles((javax.swing.JSplitPane) _c), valor);
                } else if (_c instanceof JPanel) {
                    habilitaControles(getControles((JPanel) _c), valor);
                } else if (_c instanceof javax.swing.JViewport) {
                    habilitaControles(getControles((javax.swing.JViewport) _c), valor);
                } else if (_c instanceof JComboBox) {
                    ((JComboBox) _c).setEnabled(valor);
                } else if (_c instanceof JCheckBox) {
                    ((JCheckBox) _c).setEnabled(valor);
                } else if (_c instanceof JScrollBar) {
                    ((JScrollBar) _c).setEnabled(valor);
                } else if (_c instanceof JButton) {
                    ((JButton) _c).setEnabled(valor);
                } else if (_c instanceof JList) {
                    ((JList) _c).setEnabled(valor);
                } else if (_c instanceof JComboBox) {
                    ((JComboBox) _c).setEnabled(valor);
                } else if (_c instanceof JTable) {
                    ((JTable) _c).setEnabled(valor);
                } else if (_c instanceof javax.swing.JPopupMenu) {
                    habilitaControles(getControles((javax.swing.JPopupMenu) _c), valor);
                } else if (_c instanceof javax.swing.JMenuItem) {
                    ((javax.swing.JMenuItem) _c).setEnabled(valor);
                } else if (_c instanceof JScrollPane) {
                    JScrollPane jsp = (JScrollPane) _c;
                    jsp.setEnabled(valor);
                    habilitaControles(getControles((JScrollPane) _c), valor);
                } else if (_c instanceof JFormattedTextField) {
                    ((JFormattedTextField) _c).setEnabled(valor);
                }
            }
        }
    }

    /**
     * <p>Recorre los controles incluidos en la ventana e invoca al m???todo limpiar de
     * cada uno de ellos, a menos que sea una tabla o que esté contenido en
     * un JScrollPane en tal caso no los limpia</p>
     *
     */
    public void limpiaControles() {
        limpiaControles(true);
    }

    /**
     * <p>Recorre los controles incluidos en la ventana e invoca al m???todo limpiar de
     * cada uno de ellos, las tablas y los JScrollPane los limpia solo si
     * la propiedad todos está habilitada</p>
     *
     */
    public void limpiaControles(boolean todos) {
        limpiaControles(getContentPane(), todos);
    }

    /**
     * <p>Recorre los controles incluidos en el contenedor e invoca al método limpiar de
     * cada uno de ellos, a menos que sea una tabla o que esté contenido en
     * un JScrollPane en tal caso no los limpia</p>
     *
     */
    public void limpiaControles(Container c) {
        limpiaControles(c, true);
    }
    public boolean limpiar = true;

    public void setLimpiarComponentes(boolean limpiar) {
        this.limpiar = limpiar;
    }
    boolean okLimpiar = false;

    public void limpiaControles(Container c, boolean todos) {
        if (limpiar) {
            for (int i = 0; i < c.getComponentCount(); i++) {
                if (c.getComponent(i).getName() != null) {
                    if (c.getComponent(i).getName().equals("NO_ALL") || c.getComponent(i).getName().equals("NO_LIMPIAR")) {
                        okLimpiar = false;
                    } else {
                        okLimpiar = true;
                    }
                } else {
                    okLimpiar = true;
                }
                if (okLimpiar) {
                    if (c.getComponent(i) instanceof JTextArea) {
                        ((JTextArea) c.getComponent(i)).setText("");
                    } else if (c.getComponent(i) instanceof JTextField) {
                        ((JTextField) c.getComponent(i)).setText("");
                    } else if (c.getComponent(i) instanceof JCheckBox) {
                        ((JCheckBox) c.getComponent(i)).setSelected(false);
                    } else if (c.getComponent(i) instanceof JPanel) {
                        limpiaControles((JPanel) c.getComponent(i), todos);
                    } else if (c.getComponent(i) instanceof JComboBox) {
                        ((JComboBox) c.getComponent(i)).setSelectedIndex(-1);
                    } else if (c.getComponent(i) instanceof JList) {
                        ((JList) c.getComponent(i)).setSelectedIndex(-1);
                    } else if (c.getComponent(i) instanceof javax.swing.JTabbedPane) {
                        limpiaControles((javax.swing.JTabbedPane) c.getComponent(i), todos);
                    } else if (c.getComponent(i) instanceof javax.swing.JSplitPane) {
                        limpiaControles((javax.swing.JSplitPane) c.getComponent(i), todos);
                    } else if (c.getComponent(i) instanceof JScrollPane) {
                        limpiaControles((JScrollPane) c.getComponent(i), todos);
                    } else if (c.getComponent(i) instanceof JViewport) {
                        limpiaControles((JViewport) c.getComponent(i), todos);
                    } else if (todos) {
                        if (c.getComponent(i) instanceof JTable) {
                            if (((JTable) c.getComponent(i)).getRowCount() > 0) {
                                ((JTable) c.getComponent(i)).removeRowSelectionInterval(0, ((JTable) c.getComponent(i)).getRowCount() - 1);
                                ((JTable) c.getComponent(i)).updateUI();
                            }
                        } else if (c.getComponent(i) instanceof JScrollPane) {
                            limpiaControles((JScrollPane) c.getComponent(i), todos);
                            JScrollPane jsp = (JScrollPane) c.getComponent(i);
                            jsp.setViewport(null);
                        }
                    }
                }
            }
        }
    }

    /**
     * <p>Menu con un grupo de items comunes a todos las ventanas
     * que manipulan datos</p>
     *
     *
     * @return
     */
    public MenuEstandar getMenu() {
        return menu;
    }

    /**
     * <p>Menu con un grupo de items comunes a todos las ventanas
     * que manipulan datos</p>
     *
     *
     * @param _menu
     */
    public void setMenu(MenuEstandar _menu) {
        menu = _menu;
    }

    /**
     * <p>Inicializa los componentes</p>
     *
     */
    public void iniciarComponentes() {
        String[] nombres = {"nuevo", "buscar", "modificar", "guardar", "eliminar", "salir", "imprimir", "cancelar"};
        for (int z = 0; z < nombres.length; z++) {
            adicionarActionListener(barra.getBoton(nombres[z]), nombres[z] + "ActionPerformed");
            adicionarActionListener(menu.getItemMenu(nombres[z]), nombres[z] + "ActionPerformed");
        }
    }

    /*
     * <p>Adiciona un oidor al boton de entrada, y cada vez que haya un evento llama al metodo de entrada</p>
     * @param b JAbstractButton al cual se len agregara el oidor de eventos. en este caso pude ser un JButton o un JMenuItem
     * @param metodoActionPerformed nombre del metodo que se va a crear para llamar al action performed.
     */
    public void adicionarActionListener(AbstractButton b, String metodoActionPerformed) {
        try {
            final Class claz = getClass();
            Class[] parameterTypes = {Class.forName("java.awt.event.ActionEvent")};
            final Method method = claz.getMethod(metodoActionPerformed, parameterTypes);
            final ManipulacionDatos mpd = this;
            b.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    try {
                        method.invoke(mpd, e);
                    } catch (java.lang.IllegalAccessException ex) {
                        //log.info("Error de Acceso" + ex.getMessage());
                        ex.printStackTrace();
                    } catch (java.lang.reflect.InvocationTargetException ex) {
                        //log.info("TargetException error: " + ex.getMessage());
                        ex.printStackTrace();
                    }
                }
            });
        } catch (ClassNotFoundException e) {
            //log.info("ClassNot found Exception" + e.getMessage());
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            //log.info("No such methodException: " + e.getMessage());
            e.printStackTrace();
        }
    }

    public Object getPanelMetodosPantalla() {
        return panelMetodosPantalla;
    }

    public void setPanelMetodosPantalla(Object _panelMetodosPantalla) {
        panelMetodosPantalla = _panelMetodosPantalla;
        if (panelMetodosPantalla instanceof JComponent) {
            this.getContentPane().add((JComponent) panelMetodosPantalla);
            limpiaControles();
            habilitaControles(false);
        }
    }

    public void sincronizaEstadoBotones(String estado) {
        if (estado.equals(EstadoRegistroBasico.db)) {
            setEstado(CodigoBotones.dbEnTabla);
        } else if (estado.equals(EstadoRegistroBasico.nuevo)) {
            setEstado(CodigoBotones.nuevoEnTabla);
        } else if (estado.equals(EstadoRegistroBasico.eliminado)) {
            setEstado(CodigoBotones.eliminadoEnTabla);
        } else if (estado.equals(EstadoRegistroBasico.modificado)) {
            setEstado(CodigoBotones.modificadoEnTabla);
        }
    }

    public void showMensaje(Exception e) {
        if (e instanceof ig.formato.util.IGFormatoException) {
            DConfirmacion.show(((IMetodosPantallas) panelMetodosPantalla).getFrame(), (ig.formato.util.IGFormatoException) e);
        } else {
            DConfirmacion.show(((IMetodosPantallas) panelMetodosPantalla).getFrame(), e.toString());
        }
        e.printStackTrace();
    }

    public static void showMensajeFrama(Exception e, Frame f) {
        if (e instanceof ig.formato.util.IGFormatoException) {
            DConfirmacion.show(f, (ig.formato.util.IGFormatoException) e);
        } else {
            DConfirmacion.show(f, e.toString());
        }
        e.printStackTrace();
    }

    public void showMensajeSimple(String mensaje) {
        JOptionPane.showMessageDialog(((IMetodosPantallas) panelMetodosPantalla).getFrame(), mensaje, "Mensaje", JOptionPane.INFORMATION_MESSAGE, new javax.swing.ImageIcon(getClass().getResource("/ig/formato/util/images/igformato.gif")));
    }
}